package com.crm.service.trainingManager;

import com.crm.model.entity.trainingManager.Training;
import com.crm.model.entity.trainingManager.TrainingContact;
import com.crm.model.entity.trainingManager.TrainingDemand;
import com.crm.model.entity.trainingManager.TrainingDemandItem;
import com.crm.model.qo.trainingManager.TrainingFormQO;
import com.crm.model.qo.trainingManager.TrainingQO;
import com.crm.model.vo.trainingManager.TrainingDetailVO;
import com.crm.model.vo.trainingManager.TrainingFormVO;
import com.crm.model.vo.trainingManager.TrainingVO;

import java.util.List;

/**
 * 联系人管理信息
 */
public interface TrainingDbService {

    /**
     * 用户模块 -- 内训管理列表
     * @param trainingQO 查询条件
     * @param dateUnit 1上月 2本月
     * @param sortOrder 分组
     * @return
     */
    List<TrainingVO> selectTrainingList(TrainingQO trainingQO, Integer dateUnit, String sortOrder);

    /**
     * 新增内训管理
     * @param tra 内训实体
     * @return
     */
    Boolean addTraining(Training tra);

    /**
     * 内训详情-通过内训id查询内训详情
     * @param trainingId 内训id
     * @return
     */
    TrainingVO selectByTrainingId(String trainingId);

    /**
     * 内训管理-新增内训需求
     * @param trainingDemand 新增内训需求实体
     * @return
     */
    Boolean addTrainingDemand(TrainingDemand trainingDemand);

    /**
     * 内训管理-修改内训需求
     * @param trainingDemand 新增内训需求实体
     * @return
     */
    Boolean updateTrainingDemand(TrainingDemand trainingDemand);

    /**
     * 用户模块 -- 内训管理信息
     * @param trainingId 内训线索id
     * @return
     */
    TrainingDemand selectTrainingDemand(String trainingId);

    /**
     * 内训管理-新增内训需求项
     * @param trainingDemandItem 新增内训需求项实体
     * @return
     */
    Boolean addTrainingDemandItem(TrainingDemandItem trainingDemandItem);

    /**
     * 内训详情-内训管理项列表
     * @param sortOrder 排序字段
     * @param trainingId 内训线索id
     * @return
     */
    List<TrainingDemandItem> selectTrainingDemandItemList(String trainingId, String sortOrder);

    /**
     * 通过用户id查询内训信息
     * @param accountId 用户id
     * @return
     */
    List<Training> trainingList(String accountId);

    /**
     * 内训详情-内训联系人
     * @param sortOrder 排序字段
     * @param trainingId 内训线索id
     * @return
     */
    List<TrainingContact> selectTrainingContactList(String trainingId, String sortOrder);

    /**
     * 查询同一个内训下联系人只能有一个首要联系人
     * @param trainingId 内训id
     * @param contactState 联系类型 主联系人-1   从联系人-2
     * @return
     */
    List<TrainingContact> getTrainingAndContactState(String trainingId, Integer contactState);

    /**
     * 修改内训联系人
     * @param contact 联系人
     * @return
     */
    Boolean updateTrainingContact(TrainingContact contact);

    /**
     * 新增内训联系人
     * @param trainingContact 联系人
     * @return
     */
    Boolean addTrainingContact(TrainingContact trainingContact);

    /**
     * 用户模块 -- 内训详情 -- 同一内训线索下内训联系人的联系方式不能相同
     * @param trainingId 内训线索id
     * @param contactInformation 联系方式
     * @return
     */
    TrainingContact getTrainingIdAndContactInformation(String trainingId, String contactInformation);

    /**
     * 用户模块 -- 内训详情 -- 修改联系人回显
     * @param trainingContactId 联系人id
     * @return
     */
    TrainingContact getTrainingContact(String trainingContactId);

    /**
     * 管理模块--内训线索池列表
     * @param trainingFormQO --查询条件
     * @param dateUnit       --上月、本周、本月
     * @param sortOrder      --排序
     * @author yincuimei
     * @return
     */
    List<TrainingFormVO> selectTrainingFormVOList(TrainingFormQO trainingFormQO,Integer dateUnit,String sortOrder);

    /**
     * 管理模块-》内训线索池列表-》内训详情
     * @param trainingId  --内训ID
     * @author yincuimei
     * @return
     */
    TrainingDetailVO selectTrainingDetailVOById(String trainingId);

    /**
     * 管理模块-》内训线索池列表-》内训详情-》编辑内训
     * @param training
     * @author yincuimei
     * @return
     */
    Boolean updateTrainingById(Training training);

    Training selectByPrimaryKey(String trainingId);
}
